package part10;

/**
 * @author wcj
 * @Date 2021/5/19 17:16
 * @Version 1.0
 */
public class Part104 {
    public static void main(String[] args) {
        Parcel parcel = new Parcel();
        Contents contents = parcel.contents();
        Destination destination = parcel.destination("destination");
        // 在其他类中无法通过外部类的对象访问其中的private修饰的内部类，这是很正常的，但是这样的话实现了完全的隐藏
//        parcel.new CopyContents();
    }
}

class Parcel {

    /**
     * 实现了对外的完全不可见
     */
    private class CopyContents implements Contents {
        private int i = 10;

        @Override
        public int value() {
            return i;
        }
    }

    protected class CopyDestination implements Destination {
        private String label;

        public CopyDestination(String whereTo) {
            this.label = whereTo;
        }

        @Override
        public String readLabel() {
            return label;
        }
    }

    public Contents contents() {
        return new CopyContents();
    }

    public Destination destination(String s) {
        return new CopyDestination(s);
    }

}

interface Contents {

    /**
     * value
     *
     * @return
     */
    int value();
}

interface Destination {

    /**
     * readLabel
     *
     * @return
     */
    String readLabel();
}
